/*
 * 版权所有：杭州领域向尚科技有限公司
 * 地址：浙江省杭州市滨江区滨安路688号天和高科技产业园5-2311
 *
 * (c) Copyright Hangzhou  Area Up Technology Co., Ltd.
 */

package org.elanfox.intellicommunity.common.ienum.base;

/**
 * 对于枚举的工具类
 *
 * @author allan
 */
public class CodeDescEnumHelper {

    /**
     * 根据枚举值得到枚举描述
     *
     * @param cls
     * @param code
     * @return
     */
    public static Object getEnumDescByCode(Class<? extends CodeDescCommonEnum> cls, Object code) {
        CodeDescCommonEnum ice = getEnumTypeByCode(cls, code);
        if (ice != null) {
            return ice.getDesc();
        }
        return null;
    }

    /**
     * 根据枚举值得到枚举类型
     *
     * @param cls
     * @param code
     * @param <T>
     * @return
     */
    public static <T extends CodeDescCommonEnum> T getEnumTypeByCode(Class<T> cls, Object code) {
        if (code == null) {
            return null;
        }
        for (T item : cls.getEnumConstants()) {
            if (item.getCode().equals(code)) {
                return item;
            }
        }
        return null;
    }

    /**
     * 根据枚举值得到枚举描述
     *
     * @param cls
     * @param desc
     * @return
     */
    public static  <T extends CodeDescCommonEnum> T getEnumTypeByDesc(Class<T> cls, Object desc) {
        if (desc == null) {
            return null;
        }
        for (T item : cls.getEnumConstants()) {
            if (item.getDesc().equals(desc)) {
                return item;
            }
        }
        return null;
    }

    public static Object getEnumCodeByDesc(Class<? extends CodeDescCommonEnum> cls, Object desc) {
        CodeDescCommonEnum ice = getEnumTypeByDesc(cls, desc);
        if (ice != null) {
            return ice.getCode();
        }
        return null;
    }
}
